package com.colin.service;

import com.colin.mapper.ItemCatMapper;

import com.colin.pojo.ItemCat;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author :Colin
 * @version 创建时间: 2021/8/12 16:22
 */
@Service

public class ItemCatServiceImpl implements ItemCatService {
    @Autowired
    private ItemCatMapper itemCatMapper;


    public Map<Integer,List<ItemCat>> iniMap() {
        Map<Integer, List<ItemCat>> map = new HashMap<>();
        List<ItemCat> allList = itemCatMapper.selectList(null);
        for (ItemCat itemCat : allList) {
            Integer parentId = itemCat.getParentId();
            if (map.containsKey(parentId)) {
                map.get(parentId).add(itemCat);
            } else {

                List<ItemCat> list = new ArrayList<>();
                list.add(itemCat);
                map.put(parentId, list);
            }
        }
            return map;
    }

    @Override
    public List<ItemCat> findItemCatList(Integer level) {
        Map<Integer, List<ItemCat>> map = iniMap();
        if(level == 1){
            List<ItemCat> itemCatList1 = map.get(0);
            return itemCatList1;
        }

        if(level == 2){
            List<ItemCat> list2 = findList2(map);
            return list2;
        }
        return  findList3(map);
    }

    public List<ItemCat> findList2(Map<Integer, List<ItemCat>> map) {
        List<ItemCat> itemCatList1 = map.get(0);
        for(ItemCat oneItemCat:itemCatList1){
            List<ItemCat> itemCatList2 = map.get(oneItemCat.getId());
            oneItemCat.setChildren(itemCatList2);
        }
            return itemCatList1;
    }

    public List<ItemCat> findList3(Map<Integer, List<ItemCat>> map) {
        List<ItemCat> itemCatList1 = findList2(map);
        for(ItemCat oneItemCat:itemCatList1){
            List<ItemCat> itemCatList2 = oneItemCat.getChildren();
            if(itemCatList2 == null || itemCatList2.size() == 0){
                continue;
            }
            for (ItemCat twoItemCat:itemCatList2){
                Integer key = twoItemCat.getId();
                List<ItemCat> itemCatList3 = map.get(key);
                twoItemCat.setChildren(itemCatList3);
            }

        }
            return itemCatList1;
    }

}
